#pragma once
#include <qbprotocol/include/ProtoAdaptor.h>
#include <qbprotocol/include/SSMsgStruct.h>
#include <qbprotocol/include/SSQBModel.h>
#include <qbtools/message/RequestNotifier.h>

namespace qbbond {
void InitDecodeFuncs();
void* ExtracFunc(int, const ProtoMessage& msg, void* toDel);
void makeHisSingleDealReq(qb::proto::Message&, qb::SSRequestMsg*);
void makeMarketStreamReq(qb::proto::Message&, qb::SSRequestMsg*);
void makeMarketStreamDealReq(qb::proto::Message& msg, qb::SSRequestMsg* req);
void makeMarketStreamDealPush(qb::proto::Message& msg, qb::SSRequestMsg* req);
void makeExchangeQuoteReq(qb::proto::Message& msg, qb::SSRequestMsg* req);
void notifyHisSingleDealByParam(const qb::SSAckMsg&, NotifyFunc notify);
void notifyMktStreamByParam(const qb::SSAckMsg&, NotifyFunc notify);
void notifyQuotePushByParam(const qb::SSAckMsg&, NotifyFunc notify);
std::vector<std::string> getMKTPushParams(int func,
                                          const QBQuoteQuery_t& query);
void* extractQBCDCPriceAllV3(const ProtoMessage& msg);
void* extractQBBestPriceList(const ProtoMessage& msg);
void* extractQBExQuoteList(const ProtoMessage& msg);
void* extractQBExQuoteListSimplify(const ProtoMessage& msg);
void* extractQBSHFIQuoteList(const ProtoMessage& msg);
void* extractQBBondCreditSpreadAck(const ProtoMessage& msg);
void* extractQBIssuerCreditSpreadAck(const ProtoMessage& msg);
void extractCreditAckList(const ProtoList& ackList,
                          std::list<xQBBondCreditSpreadAckUnit>& listData);
void* extractBestPriceSynthetical(const ProtoMessage& msg);
void* extractCsiV2(const ProtoMessage& msg);
void* extractQBBondLiquidityFullAck_TableCodec(const ProtoMessage& msg);
void* extractQBIssuerLiquidityFullAck_TableCodec(const ProtoMessage& msg);
void* extractQBHighYieldBondListAck(const ProtoMessage& msg);
void* extractQBThirdPartyGuaranteeListAck(const ProtoMessage& msg);
void* extractSectorBondAck(const ProtoMessage& msg);
void* extractMarketMakeTarget(const ProtoMessage& msg);
void* extractQBBondSSInfoNewList(const ProtoMessage& msg);
void* extractBondIssuerInfo(const ProtoMessage& msg);
void* extractQBMixedBestquoteCodec(const ProtoMessage& msg);
void* extractPanoramicMarketStreamDealAck(const ProtoMessage& msg);
void* extractQBABBondRecommendPriceAck(const ProtoMessage& msg);
}  // namespace qbbond